package com.hbnu.client.handler;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.DecoderException;

import static com.hbnu.tools.PrintTool.println;

public class ExceptionHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        // 检查是否是序列化相关的异常
        if (cause instanceof DecoderException) {
            // 进一步检查是否是 InvalidClassException
            Throwable rootCause = cause.getCause(); // 获取底层的根异常
            if (rootCause instanceof java.io.InvalidClassException) {
                // 捕获并处理 InvalidClassException
                println("反序列化错误: 未找到类或类不兼容。请确保客户端和服务器端使用相同的类版本。");
                // 在这里可以发送自定义错误消息给客户端，或者做其他处理
                // ctx.writeAndFlush("反序列化错误: 未找到类或类不兼容。\n");  // 可选：发送提示消息
            } else {
                // 如果是其他类型的 DecoderException，进行通用处理
                println("解码错误: " + cause.getMessage());
            }
        } else {
            // 处理其他类型的异常
            println("发生异常: " + cause.getMessage());
        }
        //响应失败
        //ctx.channel().attr(PROMISE).get().setFailure(new RuntimeException());
        // 如果需要，可以关闭连接
        ctx.close();
    }
}
